package hello;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * 消费者类
 * 从队列中获取消息
 */

public class Consumer {

    public static final String QUEUE_NAME = "hello";

    public static void main(String[] args) throws IOException, TimeoutException {

        //创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        //配置RabbitMQ连接的参数
        factory.setHost("59.110.164.26");
        factory.setUsername("gejingyu");
        factory.setPassword("g19991227");

        //创建与RabbitMQ的连接
        Connection connection = factory.newConnection();
        //获取信道
        Channel channel = connection.createChannel();

        /**
         * 消费的回调函数
         * consumerTag 消费者的标签
         * message     消息体
         */
        DeliverCallback deliverCallback = (consumerTag, message) -> {
            System.out.println(new String(message.getBody()));
        };

        CancelCallback cancelCallback = (consumerTag) -> {
            System.out.println("消费中断");
        };

        /**
         * 消费消息
         * basicConsume接收4个参数
         * 1. String queue                    队列名称
         * 2. boolean autoAck                 是否自动应答，即队列中的消息推送出后是否需要等待响应
         * 3. DeliverCallback deliverCallback 消息被消费时的回调函数
         * 4. CancelCallback cancelCallback   消费被取消时的回调函数
         */
        channel.basicConsume(QUEUE_NAME, true, deliverCallback, cancelCallback);
    }
}
